﻿using Dlls;
using Persistencia;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using UI.Models;
using UI.Views.Consultas;
using Servicos;
using Servicos.Servico;

namespace UI.Views.Cadastros
{
    /// <summary>
    /// Interaction logic for frmCadastrarEmpresa.xaml
    /// </summary>
    public partial class frmCadastrarEmpresa : Window
    {
        private bool matrizFilial;
        private bool servidorRequerAutenticacao;
        private EmpresasDLL entidade;
        private Empresa empresa = null;
        public int codigoParaAlterarOuDeletar = 0;
        private Basicos.Cep consultacep;
        private base_cep endereco;
        public List<base_cep> lista;

        public frmCadastrarEmpresa(int codigo)
        {
            InitializeComponent();
            entidade = new EmpresasDLL();
            consultacep = new Basicos.Cep();
            txtServidor.Text = Environment.MachineName;
            txtBanco.Text = "DBExpertGerencial";
            txtVersaoBanco.Text = "0";

            if (codigo != 0)
            {
                codigoParaAlterarOuDeletar = codigo;
                Empresa empresa = entidade.getEmpresa(codigoParaAlterarOuDeletar);
            }
        }

        private void InsertOrUpdate(object sender, RoutedEventArgs e)
        {
            if (codigoParaAlterarOuDeletar != 0)
            {
                try
                {
                    Empresa empresa = new Empresa()
                    {
                        Nome = txtNome.Text.ToString(),
                        CNPJ = txtCNPJ.Text.ToString(),
                        Cep = txtCep.Text,
                        Endereco = txtEndereco.Text.ToString(),
                        Numero = txtNumero.Text.ToString(),
                        Bairro = txtBairro.Text.ToString(),
                        Cidade = txtCidade.Text.ToString(),
                        UF = txtUF.Text.ToString(),
                        PontoReferencia = txtPontoReferencia.Text.ToString(),
                        Telefone = txtTelefone1.Text.ToString(),
                        Telefone2 = txtTelefone2.Text.ToString(),
                        Email = txtEmail.Text.ToString(),
                        Contato = txtContato.Text.ToString(),
                        Servidor = txtServidor.Text.ToString(),
                        Banco = txtBanco.Text.ToString(),
                        VersaoBanco = txtVersaoBanco.Text.ToString(),
                        Complemento = txtComplemento.Text.ToString(),
                        RazaoSocial = txtNome.Text.ToString(),
                        NomeFantasia = txtNomeFantasia.Text.ToString(),
                        InscricaoEstadual = txtInscricaoEstadual.Text.ToString(),
                     //   MatrizFilial = matrizFilial
                         
                    };
                    if (ehMatriz.IsChecked == true)
                    {
                        empresa.MatrizFilial = true;
                    }
                    else if (ehFilial.IsChecked == true)
                    {
                        empresa.MatrizFilial = false;
                    }
                    entidade.Update(codigoParaAlterarOuDeletar, empresa);
                    MessageBox.Show("Empresa alterada com sucesso.");
                    empresa = new Empresa();
                }
                catch (Exception)
                {
                    MessageBox.Show("Favor preencher os campos obrigatórios antes de continuar");
                }
            }
            else
            {
                try
                {
                    Empresa empresa = new Empresa()
                    {
                        Nome = txtNome.Text.ToString(),
                        CNPJ = txtCNPJ.Text.ToString(),
                        Cep = txtCep.Text,
                        Endereco = txtEndereco.Text.ToString(),
                        Numero = txtNumero.Text.ToString(),
                        Bairro = txtBairro.Text.ToString(),
                        Cidade = txtCidade.Text.ToString(),
                        UF = txtUF.Text.ToString(),
                        PontoReferencia = txtPontoReferencia.Text.ToString(),
                        Telefone = txtTelefone1.Text.ToString(),
                        Telefone2 = txtTelefone2.Text.ToString(),
                        Email = txtEmail.Text.ToString(),
                        Contato = txtContato.Text.ToString(),
                        Servidor = txtServidor.Text.ToString(),
                        Banco = txtBanco.Text.ToString(),
                        VersaoBanco = txtVersaoBanco.Text.ToString(),
                        Complemento = txtComplemento.Text.ToString(),
                        RazaoSocial = txtNome.Text.ToString(),
                        NomeFantasia = txtNomeFantasia.Text.ToString(),
                        InscricaoEstadual = txtInscricaoEstadual.Text.ToString(),
                       // MatrizFilial = matrizFilial
                    };
                    if (ehMatriz.IsChecked == true)
                    {
                        empresa.MatrizFilial = true;
                    }
                    else if (ehFilial.IsChecked == true)
                    {
                        empresa.MatrizFilial = false;
                    }
                    entidade.Insert(empresa);
                    MessageBox.Show("Empresa adicionada com sucesso.");
                }
                catch (Exception)
                {
                    MessageBox.Show("Favor preencher os campos obrigatórios antes de continuar");
                }
            }
            Reset();
        }


        private void Delete(object sender, RoutedEventArgs e)
        {
            if (codigoParaAlterarOuDeletar != 0)
            {
                MessageBoxResult messageBoxResult = System.Windows.MessageBox.Show("Deseja excluir esta empresa?", "Confirmação", System.Windows.MessageBoxButton.YesNo);
                if (messageBoxResult == MessageBoxResult.Yes)
                {

                    entidade.Delete(empresa);
                    MessageBox.Show("Empresa alterado com sucesso.");
                }
            }
        }

        private void NeedLogin(object sender, RoutedEventArgs e)
        {
            if (requerAutenticacao.IsChecked == true)
            {
                requerAutenticacao.IsChecked = true;
                servidorRequerAutenticacao = true;
                lblUsuario.Visibility = Visibility.Visible;
                txtUsuario.Visibility = Visibility.Visible;
                lblSenha.Visibility = Visibility.Visible;
                txtSenha.Visibility = Visibility.Visible;
            }
            else
            {
                requerAutenticacao.IsChecked = false;
                servidorRequerAutenticacao = false;
                lblUsuario.Visibility = Visibility.Hidden;
                txtUsuario.Visibility = Visibility.Hidden;
                lblSenha.Visibility = Visibility.Hidden;
                txtSenha.Visibility = Visibility.Hidden;
            }
        }

        private void ehMatrizOuFilial(object sender, RoutedEventArgs e)
        {
            if (ehMatriz.IsChecked == true)
            {
                matrizFilial = true;
            }

            if (ehFilial.IsChecked == true)
            {
                matrizFilial = false;
            }
        }

        private void EditarEmpresa(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                if (txtCodigo.Text.ToString() != "")
                {
                    codigoParaAlterarOuDeletar = int.Parse(txtCodigo.Text.ToString());
                    Empresa empresa = entidade.getEmpresa(codigoParaAlterarOuDeletar);
                    if (empresa != null)
                    {
                        if (empresa.MatrizFilial == true)
                        {
                            ehMatriz.IsChecked = true;
                        }
                        else if (empresa.MatrizFilial == false)
                        {
                            ehFilial.IsChecked = true;
                        }

                        txtNome.Text = empresa.Nome;
                        txtCNPJ.Text = empresa.CNPJ;
                        txtTelefone1.Text = empresa.Telefone;
                        txtTelefone2.Text = empresa.Telefone2;
                        txtEndereco.Text = empresa.Endereco;
                        txtCep.Text = empresa.Cep;
                        txtCidade.Text = empresa.Cidade;
                        txtNumero.Text = empresa.Numero;
                        txtBairro.Text = empresa.Bairro;
                        txtUF.Text = empresa.UF;
                        txtPontoReferencia.Text = empresa.PontoReferencia;
                        txtBanco.Text = empresa.Banco;
                        txtContato.Text = empresa.Contato;
                        txtEmail.Text = empresa.Email;
                        txtServidor.Text = empresa.Servidor;
                        txtVersaoBanco.Text = empresa.VersaoBanco;
                        txtComplemento.Text = empresa.Complemento;
                        txtNomeFantasia.Text = empresa.NomeFantasia;
                        txtInscricaoEstadual.Text = empresa.InscricaoEstadual;
                    }
                    else
                    {
                        MessageBox.Show("Empresa não encontrada.");
                    }
                }
                else
                {
                    frmConsultaPadrao consultaPadrao = new frmConsultaPadrao("Empresas");
                    consultaPadrao.Owner = this;
                    consultaPadrao.Show();
                }
            }
        }

        private void Novo(object sender, RoutedEventArgs e)
        {
            Reset();
            ehMatriz.IsChecked = false;
            ehFilial.IsChecked = false;
        }

        private void Reset()
        {
            codigoParaAlterarOuDeletar = 0;
            txtCodigo.Text = "";
            txtNome.Text = "";
            txtCNPJ.Text = "";
            txtTelefone1.Text = "";
            txtTelefone2.Text = "";
            txtEndereco.Text = "";
            txtCep.Text = "";
            txtCidade.Text = "";
            txtNumero.Text = "";
            txtBairro.Text = "";
            txtUF.Text = "";
            txtPontoReferencia.Text = "";
            txtBanco.Text = "";
            txtContato.Text = "";
            txtEmail.Text = "";
            txtServidor.Text = "";
            txtVersaoBanco.Text = "";
            txtComplemento.Text = "";
            txtNomeFantasia.Text = "";
            txtUsuario.Text = "";
            txtSenha.Text = "";
            txtNomeFantasia.Text = "";
            txtInscricaoEstadual.Text = "";
            matrizFilial = false;
            ehMatriz.IsChecked = false;
            ehFilial.IsChecked = false;
        }

        private void BuscarEndereco(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.Key == Key.Enter || e.Key == Key.Tab)
                {
                        if (txtCep.Text != "")
                        {
                           endereco = consultacep.Consultar(int.Parse(txtCep.Text.ToString()));
                           if (endereco != null)
                           {
                               txtEndereco.Text = endereco.logradouro;
                               txtCidade.Text = endereco.cidade;
                               txtCep.Text = Convert.ToString(endereco.cep);
                               txtBairro.Text = endereco.bairro;
                               txtUF.Text = endereco.estado;
                           }
                           else
                           {
                               MessageBox.Show("CEP não cadastrado");
                           }
                         
                        }
                    
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Ocorreu um erro ao consultar o CEP, favor verificar os numeros digitados" +
                    " sempre devem ser digitado sem traços ou pontos");

            }

            
        }
    

    }
}